package Leetcode.数组字符串;

import java.util.Arrays;

/**
 * @Author kirito
 * @Date 2023/12/15 16:01
 * @PackageName:Leetcode.数组字符串
 * @ClassName: 合并两个有序数组
 * @Description:
 * @Version 1.0
 */
public class 合并两个有序数组 {
    public static void main(String[] args) {
        int[] nums1 = {1,2,3,0,0,0};
        int[] nums2 = {2, 5, 6};
        merge(nums1,  3, nums2,3);
        System.out.println(Arrays.toString(nums1));
    }
    public static void merge(int[] nums1, int m, int[] nums2, int n) {
//        int j = 0;
//        int M = m;
//        int N = n;
//        for (int i = 0; i < m-1; i++) {
//            if (nums2[j] >= nums1[i] && nums2[j] < nums1[i+1]) {
//                nums1[M] = nums1[i+1];
//                nums1[i+1] = nums2[j];
//                M++;
//                j++;
//            }
//
//        }
//        if (j < n) {
//            while (j < n) {
//                nums1[M] = nums2[j];
//                M++;
//                j++;
//            }
//        }

        int len1 = m - 1;
        int len2 = n - 1;
        int len = m + n - 1;
        while(len1 >= 0 && len2 >= 0) {
            // 注意--符号在后面，表示先进行计算再减1，这种缩写缩短了代码
            nums1[len--] = nums1[len1] > nums2[len2] ? nums1[len1--] : nums2[len2--];
        }
        //如果nums1纯大于nums2，那么此时nums1的后半段为0的值就是nums1此时的值，所以直接把nums2copy过来即可
        //如果nums1纯小于nums2，那么此时nums1的后半段为0的值就是nums2的值  即使copy，此时len2+1=0，即不变
        // 表示将nums2数组从下标0位置开始，拷贝到nums1数组中，从下标0位置开始，长度为len2+1
        System.arraycopy(nums2, 0, nums1, 0, len2 + 1);

    }
}
